import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;

import java.util.stream.Stream;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest01 {
    @Order(2)
    @Test
    void Test01() {
        System.out.println("=======第一个测试用例=======");
    }
    @Order(1)
    @Test
    void Test02() {
        System.out.println("=======第二个测试用例=======");
    }

    //单参数 只能接受一个参数
    @ParameterizedTest
    @ValueSource(ints = {1, 2, 3, 4})
    void Test03 (int x) {
        System.out.println("接收的参数是x = " + x);
    }

    //多参数
    @ParameterizedTest
    @CsvSource({"'张三', 18"})
    void Test04 (String name, int age) {
        System.out.println("名字为：" + name);
        System.out.println("年龄为：" + age);
    }

    //多参数，读取文件中的数据
    @ParameterizedTest
    @CsvFileSource(resources = "Test01.csv")
    void Test05 (String name, int age) {
        System.out.println(name + "今年" + age + "岁");
    }



    //多参数，通过方法生成参数
    @ParameterizedTest
    @MethodSource("Generate")
    void Test06 (String name, int age) {
        System.out.println(name + "今年" + age + "岁了");
    }

    public static Stream<Arguments> Generate() {
        return Stream.of(
                Arguments.arguments("张三",18),
                Arguments.arguments("李四",20)
        );
    }


    @BeforeAll
    static void Start() {
        System.out.println("************开始测试所有测试用例************");
    }

    @AfterAll
    static void end() {
        System.out.println("************结束测试所有测试用例************");
    }

//    @BeforeEach
//    void Start (){
//        System.out.println("************开始执行一条测试用例************");
//    }
//    @AfterEach
//    void End (){
//        System.out.println("************开始执行一条测试用例************");
//    }
}